import { createStore } from 'vuex'

const store = createStore({
  state: {
    //用户信息
    userInfo: {
      name: '', //用户昵称
      avatar: '/static/user/user.png', //用户头像
      phone: '', //用户手机号
      id: '', //用户id
      sex: '', //用户性别
    },


    // 用户数据
    userdata: {
      ticket: 0, //优惠券
      score: 0, //积分
      balance: 0,//余额
      giftcard: 0,//礼品卡
    },
    // 地址管理
    addressList: [
      { address: '有一间公寓八栋', name: '隔壁老王', phone: '15106655709', sex: '先生', site: '天平湖路22号', isDefault: true },
      { address: '有两间公寓二栋', name: '老六', phone: '15863866538', sex: '女士', site: '天平湖路22号', isDefault: true },
    ],

    token: '', //用户token
    isLogin: false, //是否登录
    order: 0, //订单


  },
  mutations: {
    //设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    // 设置用户name
    setUserName(state, name) {
      state.userInfo.name = name
    },
    // 设置用户头像
    setUserAvatar(state, avatar) {
      state.userInfo.avatar = avatar
    },
    // 设置用户手机号
    setUserPhone(state, phone) {
      state.userInfo.phone = phone
    },
    // 设置用户id
    setUserId(state, id) {
      state.userInfo.id = id
    },
    // 设置用户性别
    setUserSex(state, sex) {
      state.userInfo.sex = sex
    },


    //设置用户数据
    setUserData(state, userdata) {
      state.userdata = userdata
    },
    //设置余额
    setBalance(state, newbalance) {
      state.userdata.balance = newbalance
    },
    //设置地址管理
    addBalance(state, amount) {
      state.userdata.balance += amount;
    },
    //设置token
    setToken(state, token) {
      state.token = token
    },
    //设置登录状态
    setIsLogin(state, isLogin) {
      state.isLogin = isLogin
    },
    //设置订单
    setOrder(state, order) {
      state.order = order
    },

    //退出登录的操作
    resetState(state) {
      // 使用 Object.keys 遍历 state 对象的所有键
      Object.keys(state).forEach(key => {
        // 如果 state 的属性是对象，则遍历该对象的所有键
        if (typeof state[key] === 'object') {
          Object.keys(state[key]).forEach(subKey => {
            // 检查属性的类型
            if (typeof state[key][subKey] === 'number') {
              state[key][subKey] = 0; // 如果是数字，设置为 0
            } else {
              state[key][subKey] = null; // 否则，设置为 null
            }
          });
        } else {
          // 检查属性的类型
          if (typeof state[key] === 'number') {
            state[key] = 0; // 如果是数字，设置为 0
          } else {
            state[key] = null; // 否则，设置为 null
          }
        }
      });
    },
  },
  actions: {
    //设置地址管理的action
    addAddress({ commit }, newAddress) {
      commit('addAddress', newAddress);
    },
    // 设置 token 的 action
    setToken({ commit }, token) {
      commit('setToken', token);
    },
  },
  getters: {
    //获取地址管理
    getAddressList(state) {
      return state.addressList;
    },
  },
})

export default store
